package testes;

import static org.junit.Assert.*;


import java.util.HashSet;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.quasar.copaPaises.businessLayer.*;

public class JogadorTest {

	
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		
	}

	@AfterClass
	public static void tearDownAfterClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	
	}

	@After
	public void tearDown() throws Exception {
		 CalendarDate.allInstances.clear();
		  Campeonato.allInstances.clear();
		  Cartao.allInstances.clear();
		  Cidade.allInstances.clear();
		  Clube.allInstances.clear();
		  Continente.allInstances.clear();
		  Equipa.allInstances.clear();
		  Estadio.allInstances.clear();
		  Golo.allInstances.clear();
		  Grupo.allInstances.clear();
		  Jogador.allInstances.clear();
		  Jogo.allInstances.clear();
		  Membro.allInstances.clear();
		  Pais.allInstances.clear();
		  Participacao.allInstances.clear();
		  Participante.allInstances().clear();
		  Treinador.allInstances.clear();
	}

	@Test
	public final void testToString() {
		Jogador j = new Jogador();
		assertTrue(j.toString().equals("Jogador [posicao=null, clube=null]\n"));
	}

	@Test
	public final void testJogador() {
		Jogador j = new Jogador();
		assertNotNull(j);
	}

	@Test
	public final void testJogadorCalendarDateStringPaisPosicaoJogadorClube() {
		CalendarDate cd = new CalendarDate();
		String nomeJogador = "teste";
		Pais p = new Pais();
		PosicaoJogador pos = PosicaoJogador.Avancado;
		Clube c = new Clube();
		Jogador j = new Jogador(cd, nomeJogador, p, pos, c);
		assertNotNull(j);
		assertNotNull(j.data_nascimento());
		assertNotNull(j.nome());
		assertNotNull(j.nacionalidade());
		assertNotNull(j.posicao());
		assertNotNull(j.clube());		
	}

	@Test
	public final void testPosicao() {
		Jogador j = new Jogador();
		PosicaoJogador p = PosicaoJogador.Avancado;
		j.setPosicao(p);
		assertEquals(j.posicao(), p);
	}

	@Test
	public final void testSetPosicao() {
		Jogador j = new Jogador();
		PosicaoJogador p = PosicaoJogador.Avancado;
		j.setPosicao(p);
		assertNotNull(j.posicao());
	}

	@Test
	public final void testClube() {
		Jogador j = new Jogador();
		Clube c = new Clube();
		j.setClube(c);
		assertEquals(j.clube(), c);
	}

	@Test
	public final void testSetClube() {
		Jogador j = new Jogador();
		Clube c = new Clube();
		j.setClube(c);
		assertNotNull(j.clube());
	}

	@Test
	public final void testParticipacoes() {
		Jogador j = new Jogador();
		HashSet<Participacao> participacoes = new HashSet<Participacao>();
		Participacao p1 = new Participacao();
		Participacao p2 = new Participacao();
		participacoes.add(p1);
		participacoes.add(p2);
		j.setParticipacoes(participacoes);
		//assertEquals(j.participacoes(), participacoes);
		assertTrue(j.participacoes().size()==2);
	}

	@Test
	public final void testSetParticipacoes() {
		Jogador j = new Jogador();
		HashSet<Participacao> p = new HashSet<Participacao>();
		j.setParticipacoes(p);
		assertNotNull(j.participacoes());
	}

	@Test
	public final void testMembro() {
		Jogador j = new Jogador();
		HashSet<Membro> m = new HashSet<Membro>();
		j.setMembro(m);
		assertEquals(j.membro(), m);
	}

	@Test
	public final void testSetMembro() {
		Jogador j = new Jogador();
		HashSet<Membro> m = new HashSet<Membro>();
		j.setMembro(m);
		assertNotNull(j.membro());
	}

	@Test
	public final void testEquipa() {
		Jogador j = new Jogador();
		HashSet<Equipa> e = new HashSet<Equipa>();
		j.setEquipa(e);
		assertEquals(j.equipa(), e);
	}

	@Test
	public final void testSetEquipa() {
		Jogador j = new Jogador();
		HashSet<Equipa> e = new HashSet<Equipa>();
		j.setEquipa(e);
		assertNotNull(j.equipa());
	}

	@Test
	public final void testNumGolos() {
		Jogador j = new Jogador();
		Membro m = new Membro();
		HashSet<Golo> g = new HashSet<Golo>();
		Golo golo1 = new Golo();
		Golo golo2 = new Golo();
		g.add(golo1);
		g.add(golo2);
		m.setGolos(g);
		m.setJogador(j);
		HashSet<Membro> membros = new HashSet<Membro>();
		membros.add(m);
		j.setMembro(membros);
		assertTrue (j.numGolos()==2);
	}

}
